package com.atguigu.kafka.producer;


import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.common.serialization.StringSerializer;

import java.util.Properties;

/**异步请求代码
 * 开发模式：
 *      1.面想客户端开发（我理解就是面向api开发）比如针对hdfs开发一个客户端
 *          思路：
 *              --获取客户端连接对象
 *              --调用具体api完成功能
 *              --关闭连接
 *      2.面向插件开发，比如自己写一个mr，或者什么自定义的类，然后打包去运行的
 *      3.回调函数就像一种监听机制，跟zk的观察者差不多，客户端发给服务端消息，服务端给客户端一个回应（反向通知）
 */
public class ProducerClientAsync {
    public static void main(String[] args) {
            //声明一个配置对象
        Properties properties = new Properties();
        //1.指定broker地址
        properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"hadoop102:9092,hadoop103:9092");
        //2.获取序列化key和value对象
        properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
        properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());
        //3.获取客户端连接对象
        KafkaProducer<String, String> kafkaProducer = new KafkaProducer<String, String>(properties);
        for (int i = 0; i < 10; i++) {
            //4.调用producer的send方法
            kafkaProducer.send(new ProducerRecord<>("first","fengxiaolong-"+i));
        }
        //5.关闭资源
        kafkaProducer.close();

    }
}
